vlwkaos' digital garden

Rust - variables

variables

  • Rust에서 변수는 기본적으로 불변성을 가진다.
  • 변수의 선언은 let으로 한다.
  • mut을 변수명 앞에 붙여서 가변형 변수로 선언한다.
let x = 5;
x = 10; // 에러
let mut y = 5;
y = 10; //OK

🤔 JavaScript의 let과 반대. 기본적으로 const와 비슷하다.

출력

println!("Number {}", x);

[[type]]

// i8, u8, i16, u16, i32, u32, i64, u64, 
// isize, usize 아키텍쳐에따라 크기다름 (x64, x86)
// f32, f64
// bool
let x: i32 = 1;

// char single quote ASCII
let c: char = 'z';

// tuple
let t: (i32, f64, char) = (42, 6.12, 'j');

int형

fn main() {
    // i18, i16, i64, i128 and isize (32비트/64비트 구조에 따라)
    // u8, u16, u64, u128 and usize
    let my_number = 100; // 숫자는 타입 명시 하지 않으면 i32
    let your_number: u8 = 50;

    // 아래는 type inference발생해서 pass,
    // 만약 정수라도 형이 다르면(예 u8, u16끼리 연산) type error
    let result = my_number + your_number;
}

char형

fn main() {
    println!("문자열은 항상 큰 따옴표");
    // 다음은 모두 char
    let letter = 'A' // 글자는 작은 따옴표
    let space = ' ';
    let other_language = 'ㅇ'; // char는 unicode지원을 위해 4바이트형 (u32)
    let emoji = '👍';
    // 간단한 형에 대해 casting가능
    let a: u16 = 8; // i32
    let b: u8 = 10;
    let res = a + b as u16;
    
    // ASCII 형도 변환 가능
    let c = 'a' as u8; // 97

    // char 크기
    println!("Size of a char: {}", std::mem::size_of::<char>()); // 4B
    // 문자열 len()는 길이를 반환하는게 아니고 필요한 byte 수.
    // 한자 3B, 이집트 4B
    // 그럼 어떻게 길이를?
    println!("Size of a string with a: {}", "a".len()); // 1
    println!("Size of a string with a: {}", "아".len()); // 3
    // "asdf".chars().count() 이렇게 해야 길이
}

float형

fn main() {
    // f32 f64
    let my_number = 9_u8; // 이런식으로 표시할 수도 있다.
    let big_num = 1_000_000_000u64; // 보기 편하게
    let fl = 9.0; // 거의 f64를 씀
    
    
}

shadowing

let number = "THREE";
let number = 3; // 다시 선언하여 Type을 변경할 수 있다.

constants

const NUMBER: i32 = 3; // 항상 immutable하고 type이 있어야함
  • 전역 스코프에 선언 가능하다
  • 런타임에 값을 받을 수 없음 (C의 #define 과 비슷)

let ref == &

Referred in

Rust - variables